home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-04-07 | 3.3 KB | 215 lines | [TEXT/MPS ] |
- //---------------------------------------------------------------------
- //
- // Copyright © 1992 David Peterson.
- // All rights reserved.
- //
- // Permission to use, copy, modify, and distribute this software for
- // any purpose and without fee is hereby granted, provided that the
- // above copyright notice appear in all copies and that both that
- // copyright notice and this permission notice appear in supporting
- // documentation.
- //
- //---------------------------------------------------------------------
-
- #include "CQueue.h"
-
- #ifndef __MEMORY__
- #include <Memory.h>
- #endif
-
-
- CQueue::CQueue()
- {
- fFreeQueue.qFlags = nil;
- fFreeQueue.qHead = nil;
- fFreeQueue.qTail = nil;
-
- fInUseQueue.qFlags = nil;
- fInUseQueue.qHead = nil;
- fInUseQueue.qTail = nil;
-
- fCompletedQueue.qFlags = nil;
- fCompletedQueue.qHead = nil;
- fCompletedQueue.qTail = nil;
-
- fProcessingQueue.qFlags = nil;
- fProcessingQueue.qHead = nil;
- fProcessingQueue.qTail = nil;
-
- fNumPBs = 0;
-
- fFree = 0;
- fInUse = 0;
- fCompleted = 0;
- fProcessing = 0;
-
- }
-
- /* Move everything over to the free queue so that we rip through
- it freeing all the memory blocks we allocated
- */
- CQueue::~CQueue()
- {
- ParmBlkPtr pb = nil;
-
- while ((pb = this->CleanQs()) != nil)
- this->RecyclePB(pb);
-
- while ((pb = this->CleanFreeQ()) != nil)
- DisposePtr((Ptr) pb);
- }
-
- Boolean
- CQueue::AllocPBs(int howmany, int size)
- {
- Ptr p;
- int i;
-
- for (i = 0; i < howmany; i++) {
- p = NewPtrClear(size);
- if (p) {
- Enqueue((QElemPtr) p, &fFreeQueue);
- fFree++;
- fNumPBs++;
- }
- else
- return false;
- }
-
- return true;
- }
-
- ParmBlkPtr
- CQueue::GetUnusedPB()
- {
- QElemPtr pb = nil;
-
- pb = fFreeQueue.qHead;
- if (pb) {
- Dequeue(pb, &fFreeQueue);
- fFree--;
-
- Enqueue(pb, &fInUseQueue);
- fInUse++;
- }
-
- return (ParmBlkPtr) pb;
- }
-
- void
- CQueue::StoreCompletedPB(ParmBlkPtr pb)
- {
- Dequeue((QElemPtr) pb, &fInUseQueue);
- fInUse--;
-
- Enqueue((QElemPtr) pb, &fCompletedQueue);
- fCompleted++;
- }
-
- ParmBlkPtr
- CQueue::GetCompletedPB()
- {
- QElemPtr pb = nil;
-
- pb = fCompletedQueue.qHead;
- if (pb) {
- Dequeue(pb, &fCompletedQueue);
- fCompleted--;
-
- Enqueue(pb, &fProcessingQueue);
- fProcessing++;
- }
-
- return (ParmBlkPtr) pb;
- }
-
- void
- CQueue::RecyclePB(ParmBlkPtr pb)
- {
- Dequeue((QElemPtr) pb, &fProcessingQueue);
- fProcessing--;
-
- Enqueue((QElemPtr) pb, &fFreeQueue);
- fFree++;
- }
-
- ParmBlkPtr
- CQueue::CleanQs()
- {
- ParmBlkPtr pb = nil;
-
- if ((pb = this->CleanInUseQ()) != nil)
- return pb;
- else if ((pb = this->CleanCompletedQ()) != nil)
- return pb;
- else if ((pb = this->CleanProcessingQ()) != nil)
- return pb;
- else
- return nil;
- }
-
- ParmBlkPtr
- CQueue::CleanFreeQ()
- {
- QElemPtr pb = nil;
-
- pb = fFreeQueue.qHead;
- if (pb) {
- Dequeue(pb, &fFreeQueue);
- fFree--;
- }
-
- return (ParmBlkPtr) pb;
- }
-
- ParmBlkPtr
- CQueue::CleanInUseQ()
- {
- QElemPtr pb = nil;
-
- pb = fInUseQueue.qHead;
- if (pb) {
- Dequeue(pb, &fInUseQueue);
- fInUse--;
-
- Enqueue(pb, &fFreeQueue);
- fFree++;
- }
-
- return (ParmBlkPtr) pb;
- }
-
- ParmBlkPtr
- CQueue::CleanCompletedQ()
- {
- QElemPtr pb = nil;
-
- pb = fCompletedQueue.qHead;
- if (pb) {
- Dequeue(pb, &fCompletedQueue);
- fCompleted--;
-
- Enqueue(pb, &fFreeQueue);
- fFree++;
- }
-
- return (ParmBlkPtr) pb;
- }
-
- ParmBlkPtr
- CQueue::CleanProcessingQ()
- {
- QElemPtr pb = nil;
-
- pb = fProcessingQueue.qHead;
- if (pb) {
- Dequeue(pb, &fProcessingQueue);
- fProcessing--;
-
- Enqueue(pb, &fFreeQueue);
- fFree++;
- }
-
- return (ParmBlkPtr) pb;
- }
-